package com.dongrj.framework.core.utils;

import com.dongrj.framework.core.env.Env;
import com.dongrj.framework.core.env.EnvEnum;
import lombok.extern.slf4j.Slf4j;

import java.util.function.Supplier;

/**
 * @author dongrongjun
 * @date 2020/4/2
 */

@Slf4j
public class EnvUtils {


    public static String ENV = "";

    /**
     * 是开发环境
     */
    public static boolean isDev() {
        return isEnv(EnvEnum.DEV.getName());
    }

    /**
     * 是测试环境
     */
    public static boolean isTest() {
        return isEnv(EnvEnum.TEST.getName());
    }

    /**
     * 是生产环境
     */
    public static boolean isProd() {
        return isEnv(EnvEnum.PROD.getName());
    }

    /**
     * 是生产环境
     */
    public static boolean isNotProd() {
        return !isEnv(EnvEnum.PROD.getName());
    }


    public static boolean isEnv(String env) {
        if (StringUtils.isEmpty(ENV)) {
            ENV = getEnv();
        }
        return ENV.equals(env);
    }


    /**
     * 根据环境获取值
     *
     * @param prodValue    生产环境值
     * @param notProdValue 非生产环境值
     */
    public static <T> T value(T prodValue, T notProdValue) {
        return ObjectUtils.value(isProd(), prodValue, notProdValue);
    }


    /**
     * 根据环境获取值
     *
     * @param prodValue    生产环境值
     * @param notProdValue 非生产环境值
     */
    public static <T> T value(Supplier<T> prodValue, Supplier<T> notProdValue) {
        if (isProd()) {
            return prodValue.get();
        }
        return notProdValue.get();
    }


    /**
     * 设置生产环境
     */
    public static String getEnv() {
        if (StringUtils.isEmpty(ENV)) {
            String env = System.getProperty(Env.ACTIVE);
            if (StringUtils.isEmpty(env)) {
                ENV = EnvEnum.DEV.getName();
                log.error(Env.ACTIVE + "未设置默认:" + ENV);
            }
            ENV = env;
        }
        return ENV;
    }
}
